package com.tensquare.friend.service;

import com.tensquare.friend.dao.FriendDao;
import com.tensquare.friend.pojo.Friend;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author Macross
 * @Type FriendService.java
 * @Desc 交友操作服务service
 * @date 2019/12/26 14:08
 */
@Service
@Transactional
public class FriendService {

    @Autowired
    private FriendDao friendDao;

    /**
     * 添加好友操作
     * @param userId 用户id
     * @param friendId 朋友id
     * @return >0:已经完成添加好友操作,否则说明他们已经是好友了,无需执行添加好友的操作
     */
    public int addFriend(String userId, String friendId) {
        //判断指定用户是否以及和另一个指定的用户是朋友关系
        int count = friendDao.countByUserIdAndFriendId(userId,friendId);
        //如果有记录,也就是说他们已经是朋友关系
        if (count > 0){
            //返回0,也就是说无需进行添加好友操作
            return 0;
        }
        //生成添加好友信息对象,设置他们是单向好友关系
        Friend friend = new Friend(userId, friendId, "0");
        //保存信息
        friendDao.save(friend);
        //判断指定另一个指定的用户是否以及和用户是朋友关系
        count = friendDao.countByUserIdAndFriendId(friendId, userId);
        //如果有记录,也就是说他们已经是朋友关系,这时将他们设置为双向好友关系
        if (count > 0){
            //修改他们的添加好友信息,关系设置为双向好友
            friendDao.updateIsLike(userId,friendId,"1");
            friendDao.updateIsLike(friendId,userId,"1");
        }
        //返回1,也就说已经完成添加好友的操作
        return 1;
    }

    /**
     * 删除好友
     * @param userId 用户ID
     * @param friendId 朋友ID
     * @return
     */
    public int delete(String userId, String friendId) {
        //删除好友信息记录,返回影响行数
        int count = friendDao.deleteByUserIdAndAndFriendId(userId, friendId);
        //没有删除记录,也就是说他们不是朋友关系
        if (count == 0){
            //返回0,也就是说无需进行删除好友的后续操作了
            return 0;
        }
        //判断朋友和用户是否为朋友关系
        count = friendDao.countByUserIdAndFriendId(friendId, userId);
        //如果有记录,则说明他们以前是双向好友关系
        if (count > 0) {
            //这时需要把朋友与用户的关系设置为单向喜欢关系
            friendDao.updateIsLike(friendId,userId,"0");
        }
        //返回1,也就说已经完成删除好友的操作
        return 1;
    }
}
